// 1.正确使用typescript语法
// 2.正确构建typescript运行环境
// 3.正确使用class
// 4.正确使用接口
// 7.正确添加注释描述实现思路


// 10.正确实现倒计时功能
// 11.倒计时正确展示在页面上
// 接口
export interface ParamsRawState {
	endTime: string
	wrpper: HTMLElement
}


// 类定义 
// 8.封装倒计时组件
class CountDown {
	// 实例属性
	endTime: string
	wrpper: HTMLElement
	// 5.正确编写类型（不可全部使用any）
	// 构造器
	constructor(params: ParamsRawState) {
		// 初始化实例属性
		this.endTime = params.endTime
		this.wrpper = params.wrpper
		// 开始一次
		this.startCountDown()
		// 循环
		this.loop()
	}
	startCountDown() {
		console.log(this)
		// 1. 算当前时间和传递过来的未来  差值
		const start = new Date().getTime()
		const end = new Date(this.endTime).getTime()
		// 2. 差值： 时间戳 单位毫秒
		const result = end - start
		// 3. 天 小时 分钟 秒
		const secends = Math.floor(result / 1000 % 60).toString().padStart(2, '0')
		const minutes = Math.floor(result / 1000 / 60 % 60).toString().padStart(2, '0')
		const hours = Math.floor(result / 1000 / 60 / 60 % 24).toString().padStart(2, '0')
		const days = Math.floor(result / 1000 / 60 / 60 / 24).toString().padStart(2, '0')

		this.wrpper.innerHTML = `${days}:${hours}:${minutes}:${secends}`
		console.log(`${days}:${hours}:${minutes}:${secends}`)
	}
	loop() {
		setInterval(() => this.startCountDown(), 1000)
	}
}



// 9.使用示例的方式调用实现效果
// new CountDown({
// 	endTime: '2023/05/01',
// 	// 6.正确使用类型断言和类型推论
// 	wrpper: document.querySelector('#qwe') as HTMLElement
// })






// 12.正确封装longest函数
// 13.正确编写参数的类型

function longest(param: string) {
	// 14.如果没有传递参数则使用alert提示未传递参数

	if (!param) {
		alert('未传递参数');
		return
	}
	// 15.如果传递参数,则正确分割英文句子
	const words = param.split(' ')
	// 16.正确查找分割后的句子中长度最长的单词
	// 方式一： 假定比较法
	// let max = 0;
	// words.forEach((v, i) => {
	// 	if (max < v.length) max = v.length
	// })
	// return max
	// 方式二
	// words.sort((a, b) => {
	// 	return a.length - b.length
	// })
	// return words.pop()?.length
	// 方式三
	// const arr = words.map(v => v.length)
	// return Math.max(...arr)
	// 方式四
	return words.reduce((p, n) => {
		return p > n.length ? p : n.length
	}, 0)
	// let life be beautiful like summer flowers
	// 第一次： p： 0,  n.length: 3  => 3
	// 第二次:  p:  3,  n.length: 4  => 4
	// ....

}

// 17.正确将最长单词的长度返回
// 18.Longest方法功能无bug
// 19.控制台无报错
// 规范项目目录结构


const result = longest('let life be beautiful like summer flowers')
console.log(result)